package designpattern.observer.reactive;

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.subjects.Subject;

public class Reactive {
    public static void main(String[] args) {
        System.out.println("=== 使用Observable.just()示例 ===");
        Observable<String> observable = Observable.just(
                "Hello",
                "World");
        observable
                .map(a -> a.toUpperCase())
                .subscribe(System.out::println);

        System.out.println("\n=== 使用Subject手动触发示例 ===");
        // 创建PublishSubject用于手动触发事件
        Subject<String> subject = PublishSubject.create();

        // 订阅subject并处理数据
        subject
                .map(String::toUpperCase)
                .subscribe(
                        data -> System.out.println("接收到数据: " + data));

        // 手动触发事件
        subject.onNext("手动触发");
        subject.onNext("第一个字符串");
        subject.onNext("第二个字符串");

        // 完成数据流
        subject.onComplete();

        System.out.println("\n=== 使用Subject作为事件总线示例 ===");
        // 创建另一个subject作为事件总线
        Subject<String> eventBus = PublishSubject.create();

        // 多个订阅者
        eventBus
                .filter(text -> text.length() > 3)
                .subscribe(text -> System.out.println("订阅者1 - 长文本: " + text));

        eventBus
                .map(text -> "处理后的: " + text)
                .subscribe(text -> System.out.println("订阅者2: " + text));

        // 发布事件
        eventBus.onNext("Hi");
        eventBus.onNext("Hello");
        eventBus.onNext("RxJava Subject");
        eventBus.onComplete();
    }
}
